Fix json validation of complex types in strict models #818
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I'd like to use SQLModel with strict models exposed via FastAPI. However, there seem to be a few edge cases specifically with date, UUID, and similar "complex" types that aren't native json types where the "strict validate json" behavior is not used and instead SQLModel/FastAPI/Pydantic is expecting the exact type (eg: a
dateorUUIDinstance) which obviously fails when we're parsing from a json string. For example, this script:errors for the
SQLStrictmodel onmaincallingmodel_validate_jsonandTypeAdapter.validate_jsonwhile all of the other models work as expected.This PR implements
SQLModel.model_validate_jsonby splittingsqlmodel_validateinto a main helper with*_pythonand*_jsonvariants that defer to the appropriate Pydantic method.This fixes the direct
.model_validate_jsoncalls, but there still seem to be some separate issues with the TypeAdapter. I'm not sure yet what's wrong with TypeAdaptor aroundSQLModels (given it works fine withPydanticStrictabove), but this seems to be the main blocker for fixing the usage in FastAPI so I've kept this PR as a draft for now while I figure that out - I'd appreciate any guidance!